<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us" lang="en-us">
<head>
  <link href="https://gmpg.org/xfn/11" rel="profile">
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta name="generator" content="Hugo 0.68.3" />

  
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>第四篇文章 &middot; 我的博客</title>
  <meta name="description" content="" />

  
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/print.css" media="print">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/poole.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/syntax.css">
  <link type="text/css" rel="stylesheet" href="/my_technology_blog/css/hyde.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Abril+Fatface|PT+Sans:400,400i,700">


  
  <link rel="apple-touch-icon-precomposed" sizes="144x144" href="/apple-touch-icon-144-precomposed.png">
  <link rel="shortcut icon" href="/favicon.png">

  
  
</head>

  <body class="theme-base-0self ">
  <aside class="sidebar">
  <div class="container sidebar-sticky">
    <div class="sidebar-about">
      <a href="/my_technology_blog/"><h1>我的博客</h1></a>
      <p class="lead">
       这里是田帅康的个人博客 
      </p>
    </div>

    <nav>
      <ul class="sidebar-nav">
        <li><a href="/my_technology_blog/">Home</a> </li>
        
      </ul>
    </nav>

    <p>&copy; 2020. All rights reserved. </p>
  </div>
</aside>

    <main class="content container">
    <div class="post">
  <h1>第四篇文章</h1>
  <time datetime=2020-04-09T00:00:00Z class="post-date">Thu, Apr 9, 2020</time>
  <h2 id="python垃圾回收机制">python垃圾回收机制</h2>
<h3 id="引用计数">引用计数</h3>
<p>1）当一个对象的引用被创建或者复制时，对象的引用计数加1；当一个对象的引用被销毁时，对象的引用计数减1<br>
2）当对象的引用计数减少为0时，就意味着对象已经再没有被使用了，可以将其内存释放掉。</p>
<h3 id="标记清除">标记清除</h3>
<p>1）它分为两个阶段：第一阶段是标记阶段，GC会把所有的活动对象打上标记，第二阶段是把那些没有标记的对象非活动对象进行回收。<br>
2）对象之间通过引用（指针）连在一起，构成一个有向图<br>
3）从根对象（root object）出发，沿着有向边遍历对象，可达的（reachable）对象标记为活动对象，不可达的对象就<br>
是要被清除的非活动对象，根对象就是全局变量、调用栈、寄存器。</p>
<h3 id="分代回收">分代回收</h3>
<ol>
<li>分代回收是建立在标记清除技术基础之上的，是一种以空间换时间的操作方式。</li>
<li>Python将内存分为了3“代”，分别为年轻代（第0代）、中年代（第1代）、老年代（第2代）</li>
<li>他们对应的是3个链表，它们的垃圾收集频率与对象的存活时间的增大而减小。</li>
<li>新创建的对象都会分配在年轻代，年轻代链表的总数达到上限时，Python垃圾收集机制就会被触发<br>
5.老年代中的对象是存活时间最久的对象，甚至是存活于整个系统的生命周期内</li>
</ol>
<h3 id="gil">GIL:</h3>
<p>全局解释器锁（英语：Global Interpreter Lock，缩写GIL），<br>
是计算机程序设计语言解释器用于同步线程的一种机制，它使得任何时刻仅有一个线程在执行。<br>
即便在多核心处理器上，使用 GIL 的解释器也只允许同一时间执行一个线程。</p>
<p>1）为了解决不同线程同时访问同一资源时，数据保护问题，而产生了GIL<br>
2）GIL在解释器的层面限制了程序在同一时间只有一个线程被CPU实际执行，而不管你的程序里实际开了多少条线程<br>
3）为了解决这个问题，CPython自己定义了一个全局解释器锁，同一时间仅仅有一个线程可以拿到这个数据<br>
4）python之所以会产生这种不好的状况是因为python启用一个线程是调用操作系统原生线程，就是C接口</p>
<h3 id="悲观锁和乐观锁">悲观锁和乐观锁</h3>
<p>乐观锁不是数据库自带的，需要我们自己去实现。乐观锁是指操作数据库时(更新操作)，想法很乐观，<br>
认为这次的操作不会导致冲突，在操作数据时，并不进行任何其他的特殊处理（也就是不加锁），<br>
而在进行更新后，再去判断是否有冲突了。</p>
<h3 id="悲观锁">悲观锁</h3>
<p>每次去拿数据的时候都认为别人会修改，所以每次在拿数据的时候都会上锁，<br>
这样别人想拿这个数据就会block直到它拿到锁</p>
<h2 id="mysql">MySQL</h2>
<h3 id="索引是什么">索引是什么</h3>
<p>索引是对数据库中一或多个列值的排序，帮助数据库高效获取数据的数据结构</p>
<h3 id="4个索引类型">4个索引类型：</h3>
<p>普通索引 、唯一索引、主键索引 、全文索引</p>
<h3 id="索引优点">索引优点</h3>
<p>（1）加快检索速度。<br>
（2）唯一索引确保每行数据的唯一性<br>
（3）在使用索引的过程可以优化隐藏器，提高系统性能</p>
<h3 id="索引缺点">索引缺点</h3>
<p>（1）插入删除 修改 维护速度下降<br>
（2）占用物理和数据空间</p>
<h3 id="1-innodb事务原理">1. InnoDB事务原理</h3>
<ol>
<li>事务（Transaction）是数据库区别于文件系统的重要特性之一，<br>
事务会把数据库从一种一致性状态转换为另一种一致性状态。</li>
<li>在数据库提交时，可以确保要么所有修改都已保存，要么所有修改都不保存。</li>
</ol>
<h3 id="2-事务的四大特征acid">2. 事务的四大特征（ACID）</h3>
<ol>
<li>原子性(Atomicity)：整个事物的所有操作要么全部提交成功，要么全部失败回滚(不会出现部分执行的情况)。</li>
<li>一致性(Consistency)：几个并行执行的事务，其执行结果必须与按某一顺序串行执行的结果相一致。</li>
<li>隔离性(Isolation)：事务的执行不受其他事务的干扰，事务执行的中间结果对其他事务必须是透明的。</li>
<li>持久性(Durability):  一个事务一旦被提交了，那么对数据库中的数据的改变就是永久性的，<br>
即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。</li>
</ol>
<h3 id="并发带来的影响">并发带来的影响</h3>
<p>1.更新丢失:最后的更新覆盖了其他事务之前的更新，而事务之间并不知道，发生更新丢失。<br>
预防更新丢失:<br>
1.在一个开发人员完成并提交事务之前，另一个开发人员不能访问同一文件，则可避免此问题。<br>
2.锁住满足条件的行。</p>
<p>脏读:一个事务在更新一条记录，未提交前，第二个事务读到了第一个事务更新后的记录，<br>
那么第二个事务就读到了脏数据 。<br>
脏读解决方案:<br>
1.调整mysql事务隔离级别，数据库的事务隔离越严格，并发负作用越小。<br>
2.加锁</p>

</div>


    </main>

    
      
    
  </body>
</html>
